/*! ****************************************************************************
 * \file ConfigFileParser.h
 * \brief
 *
 ******************************************************************************/

#ifndef CONFIG_FILE_PARSER_H
#define CONFIG_FILE_PARSER_H

//==============================================================================
//
//    I N C L U D E S
//
//==============================================================================

#include <string>
#include <map>
#include "Converter.h"
#include "Parser.h"

namespace tsc
{
namespace common
{

//==============================================================================
//
//    C O N S T A N T S
//
//==============================================================================

const char cSeparatorChar = '=';
const char cCommentChar   = '#';

//==============================================================================
//
//    C L A S S
//
//==============================================================================

class ConfigFileParser : public Parser
{
public:
  ConfigFileParser(const std::string& aFileName);
  virtual ~ConfigFileParser();

protected:
  void parseFile() throw(std::ios_base::failure);
  void parseLine(const std::string& aLine, size_t const aLineNumber) throw(std::ios_base::failure);
  void extractKey(std::string& aKey, size_t const& aSeparatorPos, const std::string& aLine) const;
  void extractValue(std::string& aValue, size_t const& aSeparatorPos, const std::string& aLine) const;

private:
  std::string mFileName;
};

} // namespace common
} // namespace tsc

#endif // CONFIG_FILE_PARSER
